home *** CD-ROM | disk | FTP | other *** search
- #include <exec/execbase.h>
- #include <dos/dos.h>
- #include <dos/rdargs.h>
- #include <clib/dos_protos.h>
-
- #include <string.h>
-
- #define VOLUME_LEN 200
-
- char ArgStr[] = "VOLUME/A";
- long ArgArray[1] = { 0 };
- extern struct ExecBase *SysBase;
-
- char VolumeName[VOLUME_LEN];
-
- int main(void)
- {
- struct RDArgs *rda;
- BOOL error = TRUE;
-
- if (SysBase->LibNode.lib_Version < 37)
- { return RETURN_FAIL; }
-
- if (rda = ReadArgs(ArgStr,ArgArray,NULL))
- {
- char *p;
- struct DosList *dol;
-
- strncpy(VolumeName,(char *)(ArgArray[0]),VOLUME_LEN-1);
-
- // Doppelpunkt rausfiltern
- if (p = strchr(VolumeName,':'))
- { *p = '\0'; }
-
- if (dol = LockDosList(LDF_READ|LDF_DEVICES|LDF_VOLUMES))
- { struct DosList *dolv, *dold;
-
- SetIoErr(ERROR_OBJECT_NOT_FOUND); // für den Fall
- dolv = FindDosEntry(dol,VolumeName,LDF_VOLUMES);
- if (dolv->dol_Task)
- { struct MsgPort *mport;
- mport = dolv->dol_Task;
- if (mport->mp_SigTask)
- { struct Task *task;
- task = mport->mp_SigTask;
- if (task->tc_Node.ln_Name)
- { dold = FindDosEntry(dol,task->tc_Node.ln_Name,LDF_DEVICES);
- if (dold != 0L)
- { Write(Output(),(char *)BADDR(dold->dol_Name)+1,
- *(char *)BADDR(dold->dol_Name));
- PutStr("\n");
- error = FALSE;
- }
- }
- }
- }
- UnLockDosList(LDF_READ|LDF_DEVICES|LDF_VOLUMES);
- }
- else
- { SetIoErr(ERROR_LOCK_COLLISION);
- error = TRUE;
- }
-
- FreeArgs(rda);
- }
- else
- { error = TRUE; }
-
- if (error)
- { char ProgName[100];
- if (GetProgramName(ProgName,100))
- { PrintFault(IoErr(),ProgName); }
- else
- { PrintFault(IoErr(),"GetDeviceName"); }
-
- return RETURN_FAIL;
- }
- else
- {
- return RETURN_OK;
- }
- }
-
-